export const WECHAT_ACCESS_TOKEN = 'wechat_access_token';

export interface WechatConfig {
  appid: string;
  secret: string;
}

export class CommonResDto {
  // 错误码
  errcode?: number;
  // 错误信息
  errmsg?: string;
}

export const ErrorCodes = [
  {
    code: '-1',
    error: 'system error',
    message: '系统繁忙，此时请开发者稍候再试',
  },
  {
    code: '40001',
    error: 'invalid credential  access_token isinvalid or not latest',
    message:
      '获取 access_token 时 AppSecret 错误，或者 access_token 无效。请开发者认真比对 AppSecret 的正确性，或查看是否正在为恰当的公众号调用接口',
  },
  {
    code: '40002',
    error: 'invalid grant_type',
    message: '不合法的凭证类型',
  },
  {
    code: '40013',
    error: 'invalid appid',
    message: '请求appid身份与获取code的小程序appid不匹配',
  },
  {
    code: '40029',
    error: 'code 无效',
    message: 'js_code无效',
  },
  {
    code: '40125',
    error: '不合法的 secret',
    message: '请检查 secret 的正确性，避免异常字符，注意大小写',
  },
  {
    code: '40164',
    error: '调用接口的IP地址不在白名单中',
    message: '请在接口IP白名单中进行设置',
  },
  {
    code: '40226',
    error: 'code blocked',
    message: '高风险等级用户，小程序登录拦截 。风险等级详见用户安全解方案',
  },
  {
    code: '40243',
    error: 'AppSecret已被冻结，请登录小程序平台解冻后再次调用',
    message: '',
  },
  {
    code: '41004',
    error: 'appsecret missing',
    message: '缺少 secret 参数',
  },
  {
    code: '45011',
    error: 'api minute-quota reach limit  mustslower  retry next minute',
    message: 'API 调用太频繁，请稍候再试',
  },
  {
    code: '50004',
    error: '禁止使用 token 接口',
    message: '',
  },
  {
    code: '50007',
    error: '账号已冻结',
    message: '',
  },
  {
    code: '61024',
    error: '第三方平台 API 需要使用第三方平台专用 token',
    message: '',
  },
];

export class Code2SessionResDto extends CommonResDto {
  openid?: string;
  session_key?: string;
  // 其余选项
  [key: string]: any;
}

export class GetAccessTokenResDto {
  access_token?: string;
  expires_in?: number;
}

export class GetPhoneNumberResDto extends CommonResDto {
  // 用户手机号信息
  phone_info?: {
    // 用户绑定的手机号（国外手机号会有区号）
    phoneNumber: string;
    //没有区号的手机号
    purePhoneNumber: string;
    //区号
    countryCode: string;
    // 数据水印
    watermark?: {
      //用户获取手机号操作的时间戳
      timestamp: number;
      //小程序appid
      appid?: string;
    };
  };
}

export class CheckEncryptedDataResDto extends CommonResDto {
  // 是否是合法的数据
  vaild?: boolean;
  // 加密数据生成的时间戳
  create_time?: number;
}
